package com.proyecto.core.vista.echo.interfaces;

import java.util.ArrayList;
import java.util.ResourceBundle;

import com.proyecto.core.modelo.excepciones.GeneralException;
import com.proyecto.core.vista.echo.componentes.WPTransaccion;
import com.proyecto.core.vista.echo.localizador.ServiceLocator;

public interface ICPAreaDatos {
	/**
	 * El metodo <code>inicializar</code> debe ser invocado por
	 * la clase que instancia CPAreaDatos
	 * @author Eduardo Ramos 2007-07-30 
	 */
	public void    inicializar();
	
	/**
	 * El metodo <code>configurarTabla</code> permite configurar las columnas y los datos a mostrar en el 
	 * CPAreaLista. Utilizar el metodo <code>getMuestraTabla()</code> para verificar si CPAreaLista se muestra
	 * @author Eduardo Ramos 2007-07-30
	 */
	public boolean configurarTabla();

	/**
	 * El metodo <code>configurarBusqueda</code> permite configurar el criterio (atributos y valores) de busqueda de datos uytilizado poara
	 * obtener informacion. Si retorna un valor true entonces la busqueda de datos se basar� en el criterio configurado por <code>configurarBusqueda</code>.
	 * para obtener los atributos y valores configurados utilziar los metodos <code>getBusquedaAtributos()</code> y <code>getBusquedaValores()</code> 
	 * @author Eduardo Ramos 2007-08-16
	 */
	public Boolean configurarBusqueda();
	
	/**
	 * El metodo <code>isActivaBusquedaInicial</code> indica si se ejecuta una busqueda inicial al momento de cargar el CP para
	 * obtener informacion.
	 * @author Eduardo Ramos 2007-10-09
	 */
	public boolean isActivaBusquedaInicial();
	
	/**
	 * El metodo <code>getServicioNombre</code> permite obtner el nombre del servicio asociado al ContentPane
	 * @author Eduardo Ramos 2007-08-16
	 */
	public String getServicioNombre();

	/**
	 * El metodo <code>setServicioNombre</code> permite modifica el nombre del servicio asociado al ContentPane, si se 
	 * invoca este metodo se debe instanciar de nuevo el servicio 
	 * @author Eduardo Ramos 2007-08-16
	 */
	public void setServicioNombre(String servicioNombre);

	/**
	 * El metodo <code>rutinaLimpiar</code> permite limpiar los campos mostrados en CPAreaDatos
	 * @author Eduardo Ramos 2007-07-30
	 */
	public void    rutinaLimpiar();
	/**
	 * El metodo <code>rutinaDeshabilitar</code> permite deshabiliar los campos en CPAreaDatos
	 * @author Eduardo Ramos 2007-07-30
	 */
	public void    rutinaDeshabilitar();
	/**
	 * El metodo <code>rutinaHabilitar</code> permite habilitar los campos en CPAreaDatos
	 * @author Eduardo Ramos 2007-07-30
	 */
	public void    rutinaHabilitar(Boolean pModoNuevo);
	
	public void    rutinaAccionIncluir();
	public void    rutinaAccionModificar();
	public void    rutinaAccionMostrar();
	public boolean rutinaAccionEliminarPre();
	public boolean rutinaAccionEliminarPost();
	public void    rutinaAccionConsultar();
	public boolean rutinaAccionAceptarPre() throws GeneralException;
	public boolean rutinaAccionAceptarPost();
	public void    rutinaAccionCancelar();
	public void    rutinaAccionCursor();
	public boolean rutinaAccionSalir();
	public boolean rutinaAccionSalirPre();
	public boolean rutinaAccionSalirPost();
	public void rutinaAccionIteracionTabla();
	
	public boolean isEsPortada();
	public void    setEsPortada(boolean esPortada);
	public boolean isMuestraMensConsultaVacia();
	public boolean isEsObjetoDTOLista();
	public Object  getObjetoDTO();
	public void    setObjetoDTO(Object pObjetoDTO, boolean pEsBinding);
	public void    setObjetoDTONuevo(Object pObjetoDTONuevo);
	public void    setObjetoDTOPadre(Object pObjetoDTOPadre);

	public String  getTituloVentana();
	public void    setTituloVentana(String tituloVentana);
	public String  getTituloVentanaExpediente();
	public boolean getMuestraTabla();
	public boolean getModoNuevo();
	
	public void    setMuestraTabla(boolean muestraTabla);
	
	public ServiceLocator getServiceLocator();
	public void setServiceLocator(ServiceLocator serviceLocator); 
	public void setWpTransaccion(WPTransaccion wpTransaccion);
	
	public ResourceBundle getMensajeError();
	public void setMensajeError(ResourceBundle mensajeError);
	
	public    String[] getBusquedaAtributos();
	public    Object[] getBusquedaValores();
	
	public ArrayList<String> getTablaTitulos();
	public ArrayList<String> getTablaCampos();
	
	public Integer getAreaDatosAncho();
	public Integer getAreaDatosAlto();
	public Integer getAreaListaAlto();
	public Integer getAreaListaAncho();
	public int getDirectivaOrdenamiento();
	
	public void rutinaAccionMostrarVentana();
	
	/**
	 * Esta rutina se ejecuta al momento de que la ventana es mostrada o traida al frente.
	 * @param pAccion
	 * @author Eduardo Ramos 2008-01-05
	 */
	public void configurarBotones(int pAccion);
	
	/**
	 * Este metodo se usa desde el contentpane hijo para conocer desde la ventana de wptransaccion si se desea realizar una busqueda
	 * o no definida en algun contentpane que herede de CPAreaDatos.
	 * @return boolean
	 */
	public boolean puedeRealizarBusqueda();
	
}
